সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন

Web Development - অ্যাঙ্গুলার (Angular) - Angular এর স্থাপত্য |
2
2

Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন (DI) অত্যন্ত গুরুত্বপূর্ণ ধারণা। Angular অ্যাপ্লিকেশন গঠনের জন্য বিভিন্ন কম্পোনেন্ট, ডিরেক্টিভ এবং সার্ভিসকে একটি মডুলার ও স্কেলেবল উপায়ে একে অপরের সাথে সংযুক্ত করা হয়। এখানে, সার্ভিস হলো সেই কোড যা কম্পোনেন্টের লজিক বা ডেটা ম্যানেজমেন্টের কাজ করে, আর ডিপেন্ডেন্সি ইনজেকশন হল Angular এর একটি ডিজাইন প্যাটার্ন যা সার্ভিস এবং অন্যান্য ডিপেন্ডেন্সি কম্পোনেন্টে ইনজেক্ট করতে ব্যবহৃত হয়।


সার্ভিস (Service)

সার্ভিস হলো একটি ক্লাস, যা সাধারণত একাধিক কম্পোনেন্ট বা অন্যান্য সার্ভিসের মধ্যে শেয়ারযোগ্য লজিক এবং ডেটা সরবরাহ করে। এটি সাধারণত Business Logic বা Data Access এর জন্য ব্যবহৃত হয়। Angular সার্ভিস ক্লাসগুলি একক ইন্সট্যান্সে (singleton) কাজ করে, যা সার্ভিসকে একাধিক কম্পোনেন্টে শেয়ার করার সুবিধা দেয়।

সার্ভিস তৈরি

সার্ভিস তৈরি করতে Angular CLI ব্যবহার করা হয়:

ng generate service user

উদাহরণ:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class UserService {

  constructor() { }

  getUserData() {
    return { name: 'John', age: 30 };
  }
}

এখানে, @Injectable ডেকোরেটরটি Angular-কে জানিয়ে দেয় যে এই ক্লাসটি একটি সার্ভিস এবং এটি ইনজেকশনের জন্য উপলব্ধ। providedIn: 'root' নির্দেশ করে যে সার্ভিসটি অ্যাপ্লিকেশন জুড়ে একটি একক ইন্সট্যান্স (singleton) হিসেবে ব্যবহৃত হবে।


ডিপেন্ডেন্সি ইনজেকশন (Dependency Injection)

ডিপেন্ডেন্সি ইনজেকশন (DI) হলো একটি ডিজাইন প্যাটার্ন, যা মাধ্যমে একটি অবজেক্ট তার ডিপেন্ডেন্সি (যেমন সার্ভিস, কনফিগারেশন, অন্যান্য অবজেক্ট) নিজে তৈরি না করে, বরং এগুলি অ্যাঙ্গুলার ইঞ্জেকশন মেকানিজম দ্বারা সরবরাহ করা হয়।

Angular একটি DI কন্টেইনার ব্যবহার করে যা একাধিক সার্ভিসের একক ইন্সট্যান্স তৈরি করে এবং তা বিভিন্ন কম্পোনেন্ট বা সার্ভিসে ইনজেক্ট করে। DI কোডকে আরও মডুলার, টেস্টেবল এবং পুনঃব্যবহারযোগ্য করে তোলে।

ডিপেন্ডেন্সি ইনজেকশন ব্যবহার

ধরা যাক, আপনি একটি UserService সার্ভিস কম্পোনেন্টে ইনজেক্ট করতে চান:

import { Component } from '@angular/core';
import { UserService } from './user.service';

@Component({
  selector: 'app-root',
  template: `<h1>{{ user.name }}</h1>`
})
export class AppComponent {
  user: any;

  constructor(private userService: UserService) {
    this.user = this.userService.getUserData();
  }
}

এখানে, UserService কে AppComponent-এ ইনজেক্ট করা হয়েছে constructor এর মাধ্যমে। Angular নিজেই UserService কে তৈরি করে এবং কম্পোনেন্টে সরবরাহ করে।


DI এর কাজের প্রক্রিয়া

  1. সার্ভিস তৈরি: প্রথমে, সার্ভিস তৈরি করতে হয়। সার্ভিসে ডেটা বা লজিক থাকে যা কম্পোনেন্ট বা অন্য সার্ভিসের জন্য প্রয়োজন হতে পারে।
  2. সার্ভিসকে @Injectable ডেকোরেটরের মাধ্যমে মার্ক করা: Angular জানিয়ে দেয় যে এটি একটি ইনজেকশনযোগ্য ক্লাস।
  3. ডিপেন্ডেন্সি ইনজেকশন কন্টেইনার: Angular অ্যাপ্লিকেশনে একটি DI কন্টেইনার রয়েছে যা ইনজেকশনের জন্য সার্ভিস বা ডিপেন্ডেন্সি প্রদান করে।
  4. সার্ভিসকে ইনজেক্ট করা: আপনি যেখানেই এই সার্ভিসটি ব্যবহার করতে চান, সেখানে এটি ইনজেক্ট করা হয়, সাধারণত কম্পোনেন্টের কনস্ট্রাক্টরে।

বিভিন্ন ইনজেকশন স্কোপ

1. Root Scope

  • যদি একটি সার্ভিস providedIn: 'root' দ্বারা প্রোভাইড করা হয়, তাহলে এটি অ্যাপ্লিকেশন জুড়ে একক (singleton) সার্ভিস হিসেবে ব্যবহৃত হবে।

2. Module Scope

  • সার্ভিসকে একটি নির্দিষ্ট মডিউলে প্রোভাইড করতে চাইলে, providers অ্যারে ব্যবহার করা হয়।

    উদাহরণ:

    @NgModule({
      providers: [UserService]
    })
    export class UserModule { }
    

3. Component Scope

  • একটি কম্পোনেন্টে শুধুমাত্র সেই কম্পোনেন্টের জন্য সার্ভিস প্রোভাইড করা যেতে পারে।

    উদাহরণ:

    @Component({
      selector: 'app-user',
      providers: [UserService]
    })
    export class UserComponent {
      constructor(private userService: UserService) { }
    }
    

সার্ভিস এবং DI এর সুবিধা

  1. কোডের পুনঃব্যবহারযোগ্যতা: একবার তৈরি করা সার্ভিসটি একাধিক কম্পোনেন্টে ব্যবহৃত হতে পারে।
  2. টেস্টিং সহজতর: সার্ভিস ইনজেকশন দ্বারা সহজেই মক সার্ভিস ব্যবহার করা সম্ভব, যা ইউনিট টেস্টিংকে সহজ করে তোলে।
  3. কোড মডুলারিটি: সার্ভিস এবং কম্পোনেন্ট একে অপর থেকে বিচ্ছিন্ন থাকে, ফলে কোড বেশি পরিষ্কার ও মডুলার হয়।
  4. সেন্ট্রালাইজড ডেটা ম্যানেজমেন্ট: সার্ভিসের মাধ্যমে ডেটা এক জায়গায় ম্যানেজ করা সম্ভব, যা অ্যাপ্লিকেশনকে আরও সুসংগঠিত এবং পরিচালনাযোগ্য করে তোলে।

সার্ভিস এবং DI এর উদাহরণ

উদাহরণ 1: সার্ভিস ইনজেকশন

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class ProductService {
  getProducts() {
    return ['Product 1', 'Product 2', 'Product 3'];
  }
}

@Component({
  selector: 'app-product',
  template: `<ul><li *ngFor="let product of products">{{ product }}</li></ul>`
})
export class ProductComponent {
  products: string[];

  constructor(private productService: ProductService) {
    this.products = this.productService.getProducts();
  }
}

এখানে ProductService সার্ভিসটি ProductComponent-এ ইনজেক্ট করা হয়েছে, এবং getProducts() মেথডের মাধ্যমে ডেটা প্রাপ্তি হচ্ছে।


সারাংশ:
Angular-এ সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন অ্যাপ্লিকেশন ডেভেলপমেন্টকে মডুলার, পুনঃব্যবহারযোগ্য এবং টেস্টযোগ্য করে তোলে। সার্ভিস কম্পোনেন্টে ইনজেক্ট করা হয় এবং তা ডেটা এবং লজিক সরবরাহ করে। ডিপেন্ডেন্সি ইনজেকশন দ্বারা ডিপেন্ডেন্সি কম্পোনেন্ট বা সার্ভিসের মধ্যে সরবরাহ করা হয়, যা কোডের পরিষ্কারতা এবং পরিচালনক্ষমতা বৃদ্ধি করে।

Content added By
Promotion